package yt.xgk.utils;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.UUID;

public class JwtUtil {
    //这个是设置我们的token失效的场景
    private static long time = 1000 * 60 * 60 * 24;//这个是设置我们的token的有效期
    private static String signature = "admin";//自定义签名

    //生成token的操作者
    public static String createToken() {
        JwtBuilder jwtBuilder = Jwts.builder();//获取到一个获取builder的对象
        //下面创建属于jwt的组成部分
        String jwtToken = jwtBuilder.setHeaderParam("typ", "JWT")//设置token的类型
                .setHeaderParam("alg", "HS256")//token的类型，使用的签名算法如HMAC、SHA256、RSA
                //添加载荷
                .claim("username", "admin")//这里进行定义一些自己想要写的东西（可以是用户的信息）
                .claim("role", "admin")//这个是添加用户的信息（可以更改）
                .setSubject("admin-test").setExpiration(new Date(System.currentTimeMillis() + time))
                .setId(UUID.randomUUID().toString())
                //设置签名(使用秘钥和header中指定的加密算法对加密的header和加密的Payload进行签名)
                .signWith(SignatureAlgorithm.HS256, signature)//这里是设置签名固定格式不用改
                .compact();//这是对头部 载荷 签名的拼接 固定
        return jwtToken;//
    }

    //判断token是否失效的一个方法
    public static boolean checkToken(String token) {
        if (token == null) {
            return false;
        }
        try {
            //只是需要关心我们的token是否有效(我们通过签名进行解签)（这边只要是可以进行解签的话 代表我们的）
            Jws<Claims> jws = Jwts.parser().setSigningKey(signature).parseClaimsJws(token);//最后这个参数是我们的token
        } catch (ExpiredJwtException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
